package cn.iocoder.yudao.module.erp.controller.admin.strategy.uniqueNo;

import cn.hutool.core.util.ObjUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Map;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.UNIQUE_BEANNAME_NOT_EXISTS;

@Component
@Slf4j
public class UniqueFactory {
    /**
     * @author Max-u-19
     * @Description Spring自动讲Strategy接口的实现类注入到Map中，key为bean id value 为对应的策略实现类
     * @date 13:38 2024/3/7
     * @param
     * @return
     **/
    @Resource
    private Map<String, UniqueNoStrategy> uniqueNoStrategyMap;

    public Boolean handle(String no, String beanName) {
        // 根据bean名称获取对应的策略实现类，注意如果componet的beanName和策略实现类的beanName不一致，会报错（如果不指定，类名称首字母小写）
        UniqueNoStrategy uniqueNoStrategy = uniqueNoStrategyMap.get(beanName);
        if (ObjUtil.isEmpty(uniqueNoStrategy)) {
            throw exception(UNIQUE_BEANNAME_NOT_EXISTS);
        }
        return uniqueNoStrategy.uniqueNo(no);
    }
}
